package com.hicorp.segment.service;

import com.hicorp.segment.pojo.bo.UserChangePassword;
import com.hicorp.segment.pojo.po.*;
import com.hicorp.segment.utils.ResultBean;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @Author: wqs
 * @Date: Created in 4:24 2021/5/19
 * @Description:
 * @ChineseDescription:
 * @Modified_By:
 */
@Service
public interface AuthorityService {
    User getUser(String username);

    /**
     * 用户注册
     *
     * @param user 前端传来的用户信息
     * @return 标准返还
     */
    ResultBean<Void> register(User user);

    /**
     * 查询所有的菜单(返回树形结构)
     *
     * @return 返回树形结构
     */
    ResultBean<List<Menu>> selectAllMenuTree();

    /**
     * 设置角色可访问的菜单
     *
     * @param roleMenuRelations 角色菜单关系
     * @return 是否成功
     */
    ResultBean<Void> setRoleMenuRelation(List<RoleMenuRelation> roleMenuRelations);

    /**
     * 设置角色可访问的BackendApi
     * @param roleBackendApiRelations 角色api关系
     * @return 是否成功
     */
    ResultBean<Void> setRoleBackendApiRelation(List<RoleBackendApiRelation> roleBackendApiRelations);
    /**
     * 设置菜单可访问的BackendApi
     * @param menuBackendApiRelationList 菜单api关系
     * @return 是否成功
     */

    ResultBean<Void> setMenuBackendApiRelation(List<MenuBackendApiRelation> menuBackendApiRelationList);
    /**
     * 设置用户角色
     *
     * @param userRoleRelations 用户角色关系
     * @return 是否成功
     */
    ResultBean<Void> setUserRoleRelation(List<UserRoleRelation> userRoleRelations);

    /**
     * 根据角色id查询其可访问的菜单的id
     *
     * @param roleId 角色id
     * @return 可访问的菜单的id
     */
    ResultBean<List<Long>> selectMenuIdByRoleId(Long roleId);

    /**
     * 根据角色id查询其可访问的APi的id
     *
     * @param roleId 角色id
     * @return 可访问的API的id
     */
    ResultBean<List<Long>> selectBackendAPiIdByRoleId(Long roleId);
    /**
     * 根据用户id查询角色id
     *
     * @param userId 用户id
     * @return 用户角色id
     */
    ResultBean<List<Long>> selectRoleIdByUserId(Long userId);


    /**
     * 管理员名称来查找它的密码比对身份
     * 比对成功后重置传入的用户的id
     */
    ResultBean<Integer> resetPassword(Long userId, String password);

    ResultBean<Integer> changePassword(UserChangePassword userChangePassword);

    ResultBean<String> uploadHeadPortrait(MultipartFile file);

//    /**
//     * 根据菜单id查询其可访问的资源
//     *
//     * @param  menuIdList 菜单id
//     * @return 可访问的资源
//     */
//    ResultBean<List<Long>> selectResourceByMenuId(List<Long> menuIdList);

    /**
     * 根据菜单id查询其可访问的backendApi
     *
     * @param  menuId 菜单id
     * @return 可访问的backendApi
     */
    ResultBean<List<BackendApi>> selectBackendApiByMenuId(Long menuId);

    /**
     * 手机端可访问的backendApi
     *
     *
     * @return 可访问的backendApi
     */
    ResultBean<List<BackendApi>> selectPhoneBackendApi();
    /**
     * 根据菜单id查询其可访问的backendApi
     *
     * @param  roleId 菜单id
     * @param roleId
     * @return 可访问的backendApi
     */
    ResultBean<List<Menu>> selectMenuBackendApiTree(Long roleId);


}
